<?php

class Category{
    /**
     * 传入一个数组，返回一个按pid排序的二维数组
     * @param  array $cate
     * @param  string $html='&nbsp;&nbsp;--'
     * @param  number $pid=0
     * @param  number $level=0
     * @return array $arr
     */    
    static public function unlimitedForLevel($cate,$pid=0,$level=0,$pid_name='parentID',$html='--') {
        $arr=array();
        foreach($cate as $v){
            if ($v[ $pid_name ]==$pid) {
                $v['level']=$level+1;
                if( $html ){
                    $v['html']=str_repeat($html,$level);
                }
                $arr[]=$v;
                $arr=array_merge($arr,self::unlimitedForLevel($cate,$v['id'],$level+1,$pid_name,$html));
            }
        }
        return $arr;
    }
    //组合多维数组
    /**
     * 返回一个多维数组，以顶级父类为第一维，二级子类为第二维，依次类推
     * @param array $cate
     * @param string $name='child'
     * @param number $pid=0
     * @return array $arr  
     */
    static public function unlimitedForLayer($cate,$name='child',$pid=0,$pid_name='parentID'){
        $arr=array();
        foreach($cate as $v){
            if ($v[$pid_name]==$pid) {
                $v[$name]=self::unlimitedForLayer($cate,$name,$v['id']);
                $arr[]=$v;
            }
        }
        return $arr;
    }
    
    //传递一个子分类ID返回所有的父级分类
    /**
     * 传递一个子分类ID返回所有的父级分类的一维数组，第一个元素为顶级父类，依次类推，最后一个为自己
     * @param array $cate
     * @param number $id 子类的ID
     * @return array $arr
     */
    static public function getParents($cate,$id){
        $arr=array();
        foreach ($cate as $v){
            if ($v['id']==$id){
                $arr[]=$v;
                $arr=array_merge(self::getParents($cate, $v['pid']),$arr);
            }
        }
        return $arr;
    }
    
    //
    /**
     * 传递一个父级分类ID返回所有子类的ID
     * @param unknown $cate
     * @param unknown $pid
     * @return 一维数组
     */
    static public function getChlidsID($cate,$pid){
        $arr=array();
        foreach ($cate as $v){
            if ($v['pid']==$pid){
                $arr[]=$v['id'];
                $arr=array_merge($arr,self::getChlidsID($cate, $v['id']));
            }
        }
        return $arr;
    }
    
    //传递一个父级分类ID返回所有子类
    static public function getChlids($cate,$pid){
        $arr=array();
        foreach ($cate as $v){
            if ($v['pid']==$pid){
                $arr[]=$v;
                $arr=array_merge($arr,self::getChlids($cate, $v['id']));
            }
        }
        return $arr;
    }
    
    static function menuTree($list){
        $list = array_combine(array_column($list,'id'),$list);
        $tree = array();
        foreach ($list as $v) {
            $id  = $v['id'];
            $pid = $v['pid'];
            if( isset($list[$pid]) ){
                $list[$pid]['child'][$id] = &$list[$id];
            }
            if( $pid==0 ){
                $tree[$id] = &$list[$id];
            }
    
        }
        // print_r($tree);die;
        return $tree;
    }

    
    
    
    
    
    
    
    
    
    
}


